#include "cuda_manager.h"

#ifdef __USE_CUDA_WARD_SENSE__

CudaManager::CudaManager() : model(nullptr) {}

CudaManager& CudaManager::getInstance() {
    static CudaManager instance;  // 单例实例，C++11 保证线程安全
    return instance;
}

bool CudaManager::loadModel(const DL_INIT_PARAM& param) {
    // 使用互斥锁保证加载模型的操作是线程安全的
    std::lock_guard<std::mutex> lock(modelMutex);  // 上锁

    if (!model) {
        model = std::make_unique<myModel>();
        return model->CreateSession(param);  // 假设 CreateSession 是模型加载的方法
    }
    return false;
}

std::vector<DL_RESULT> CudaManager::processWithCuda(MatWrapper& mat_wrapper) {
    // 使用互斥锁确保只有一个线程能进行模型推理
    std::lock_guard<std::mutex> lock(modelMutex);  // 上锁

    if (model) {
        std::vector<DL_RESULT> acting_res;
        model->RunSession(mat_wrapper.mat, acting_res);  // 执行模型推理
        return acting_res;
    }
    return {};  // 如果没有模型加载，返回空结果
}

#endif // __USE_CUDA_WARD_SENSE__
